package cn.cl.gulimall.product.exception;

import cn.cl.common.exeption.BizCodeEnume;
import cn.cl.common.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

/**
 * 标题：集中处理所有异常
 * 作者：何处是归程
 * 时间：2020/5/15 - 8:55
 */
@Slf4j
@RestControllerAdvice(basePackages = "cn.cl.gulimall.product.controller")
public class GulimallExceptionControllerAdvice {
	/**
	 * 专门处理数据校验异常
	 */
	@ExceptionHandler(value = MethodArgumentNotValidException.class)
	public R handleVaildException(MethodArgumentNotValidException e) {
		BindingResult bindingResult = e.getBindingResult();
		Map<String, String> map = new HashMap<>();
		// 获取所有的校验结果
		bindingResult.getFieldErrors().forEach((item) -> {
			// FieldErro 获取到错误提示
			String message = item.getDefaultMessage();
			// 获取到错误的属性名字
			String fieid = item.getField();
			map.put(fieid, message);
		});
		return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(), BizCodeEnume.VAILD_EXCEPTION.getMsg()).put("data", map);
	}

	/**
	 * 统一处理
	 */
//	@ExceptionHandler(value = Exception.class)
//	public R handleExcetpion(Exception e) {
//		log.error("错误描述：{}，错误类型：{}", e.getMessage(), e.getClass());
//		return R.error(BizCodeEnume.UNKNOW_EXCEPTION.getCode(), BizCodeEnume.UNKNOW_EXCEPTION.getMsg());
//	}
}
